有n个带编号的人和n个带编号的座位,求每个人都不坐在相同号码座位的方案数目

题目描述:

    有 n 位同学编号分别为1, 2, ..., n; 有 n 个座位编号分别为1, 2, ..., n。

    现在为每一位同学安排一个座位,求每个同学都坐在与自己编号不同的座位的方案数目。

分析:动态规划思想:

    假设 i 位同学,i 个座位,满足题意的方案数为 f(i)。

    考察分别有 (i-1) 和 i 位同学的情况。

    为了形象化地进行思考,设 i = 4。原来 i = 3 的时候,有 f(3) 种满足题意的方案。现在加入 i=4,则前面 1,2,... (i-1) 即 1,2,3 都可以坐在编号=4 的座位上,所以有 (i-1) 种可能。  

    假设现在是 1 坐在 4 号座位上,即:

          座位:1   2   3   4

          学生:?   ?   ?   1

    现在考察 4 号学生应该坐在哪里呢?

    (1) 4 号学生 坐在 1 号座位上,即:

          座位:1   2   3   4

          学生:4   ?   ?   1

     那么,我们可以非常明显地看到,可以把 1号座位和4 号座位拿开,让 2号同学和3号同学选 2号座位和 3号座位,即 f(i-2) ( f(2) )

(2)4 号学生 不能坐 1号座位上,那么此时:

         待安排的学生: 2 号,3 号,4 号

         待安排的座位: 1 号,2 号,3 号

          约束条件: 2 号学生   不能坐   2 号座位; (题目明确的要求!)

                             3 号学生   不能坐   3 号座位;

                             4 号学生   不能坐   1 号座位

         好!这个题目最有意思的就是这种情况,我们可以抽象地将 4号学生和 1号座位 想象成相匹配的 x 号学生和 x 号座位,那么:

          待安排的学生为 x 号,2号,3号;

          待安排的座位为 x 号,2号,3号;

          显然,满足题意的方案数 = f(i-1)  ( f(3) )

综上所述, f(i) = (i-1) * ( f(i-1) + f(i-2) )

这道题比较难理解的就是: 当 4 号学生 不能坐 1号座位上,需要抽象地将此问题转化为 规模为 (i-1) 的原问题。

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值